package interview.juide;

import java.awt.event.HierarchyBoundsAdapter;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @Author tu zy
 * @Date 2020/11/20 11:48
 * @Version 1.0
 */
public class HashMapDemo {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<String, String>();
        // 键不能重复，值可以重复
        map.put("san", "张三");
        map.put("si", "李四");
        map.put("wu", "王五");
        map.put("wang", "老王");
        map.put("wang", "老王2");// 老王被覆盖
        map.put("lao", "老王");
        System.out.println("-------直接输出hashmap:-------");
        System.out.println(map);


        /**
         * 遍历HashMap
         */
        //1.获取Map中的所有键
        Set<String> strings = map.keySet();
        Set<String> keys = strings;
        for (String key : keys) {
            System.out.println(key);
        }
        System.out.println("-------------------------");

        //获取map的所有值
        Collection<String> values = map.values();
        for (String value : values) {
            System.out.println(value);
        }


        System.out.println("----------------------------");

        /**
         * 如果既要遍历key又要value，那么建议这种方式，因为如果先获取keySet然后再执行map.get(key)，map内部会执行两次遍历。
         * 一次是在获取keySet的时候，一次是在遍历所有key的时候。
         */
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey() + "---" + entry.getValue());
        }


        //3.得到key值的同时得到key所对应的值string
        Set<String> keyes = map.keySet();
        for (String keye : keyes) {
            System.out.println(keye + ":" + map.get(keye));
        }

        //HashMap其他常用方法
        System.out.println("-------------------HashMap常用方法---------------------");
        System.out.println("after map.size()" + map.size());
        System.out.println("after map.isEmpty()" + map.isEmpty());
        System.out.println(map.remove("san"));
        System.out.println(map);
        System.out.println(map.get("si"));
        System.out.println(map.containsKey("si"));
        System.out.println(map.containsValue("李四"));
        System.out.println(map.replace("si", "李四2"));
        System.out.println("after map.replace(si,李四2):" + map);


    }
}
